package com.cskaoyan.javase.oop3._1interface._4case.operation.impl;

import com.cskaoyan.javase.oop3._1interface._4case.Goods;
import com.cskaoyan.javase.oop3._1interface._4case.GoodsData;
import com.cskaoyan.javase.oop3._1interface._4case.operation.IGoodsOperation;

/**
 * 完成和实现商品操作
 * @since 17:50
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class IGoodsOperationImpl implements IGoodsOperation {
    private Goods[] goods = GoodsData.GOODS;

    /**
     * 要求返回所有的商品对象,不包括null
     * @return com.cskaoyan.javase.oop3._1interface._4case.Goods[]
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/03/31 17:51
     */
    @Override
    public Goods[] getAllRealGoods() {
        // 数组元素的过滤
        int count = 0;
        for (Goods good : goods) {
            if (good != null) {
                count++;
            }
        }
        // 创建新数组
        Goods[] result = new Goods[count];
        // 遍历老数组,过滤元素给新数组赋值
        int newIndex = 0;
        for (Goods good : goods) {
            if (good != null) {
                result[newIndex] = good;
                newIndex++;
            }
        }
        return result;
    }

    /**
     * 插入商品对象
     *  返回一个状态码：
     *      0： 表示插入成功
     *      1： 表示插入失败，数组满了
     *      2： 表示插入失败，id重复
     *
     * @param g 被插入的商品对象,确定不为null
     * @return int
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/04/01 9:28
     */
    @Override
    public int insertGoods(Goods g) {
        // 校验id,判断id的重复性
        for (Goods realGoods : getAllRealGoods()) {
            if (realGoods.getId() == g.getId()){
                // id重复,插入失败
                return 2;
            }
        }
        // 代码运行到这里,id肯定不重复,开始插入
        for (int i = 0; i < goods.length; i++) {
            // 寻找null的位置
            if (goods[i] == null){
                goods[i] = g;
                // 插入成功
                return 0;
            }
        }
        // 数组满了.插入失败
        return 1;
    }

    /**
     * 删除成功返回true,删除失败返回false(没有找到id,删除失败)
     * @param id 被删除的商品id
     * @return boolean
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/04/01 9:39
     */
    @Override
    public boolean deleteGoods(int id) {
        for (int i = 0; i < goods.length; i++) {
            // 判断一下,数组中的null元素,直接跳过
            if (goods[i] == null){
                continue;
            }
            if (goods[i].getId() == id){
                // 找到这个元素,替换为null,表示删除
                goods[i] = null;
                return true;
            }
        }
        // 没有找到目标id的元素,删除失败
        return false;
    }
}
